Introduction

Variables in assembly do not exists in the same sense as they do in higher-level programming languages. This is especially true of local variabls such as those inside functions. Instead of allocating space for a particular value and having that place be "named" according to a variable, the compiler may use a combination of stack and heap allocations as well as registers to achieve behaviour resembling a variable.

That being said, there are some parallels with higher-level programming languages as well.

When manually programming assembly, it should be noted that variable names are more or less identical to addresses.

Constants

Assembly constants cannot be changed during run-time execution. Their value is substituted at assembly-time (corresponding to compile-time substitution for constants in higher-level languages). Consequently, constants are not even assigned a location in memory, for they turn into hard-coded values.

Defining constants in assembly is done in the following way:

<NAME> equ <value>

For example,

EXAMPLE equ 0xdeadbeef

Static Initialised Data

Static or global variables which are initialised before the programme executes are stored in the .data section. In order to define such a variable, you must give it a name, data size and value. In contrast with constants, such data can be mutated during run-time.

The following data size declarations can be used:

DeclarationSize (in bits)Type
db8
dw16
dd32
dq64
ddq128Integer
dt128Floating-Point

The syntax for declaring such variables is as follows:

<name> <dataSize> <initalValue>

For example:

byteVar db 0x1A ; byte variable

Static Uninitialised Data

Static uninitialised data is stored in the .bss section. The syntax for allocating such variables is following:

<name> <resType> <count>

Such variables are usually allocated as chunks, hence the required count. The primary data types are as follows:

DeclarationSize (in bits)
resb8
resw16
resd32
resq64
resdq128

Some examples:

bArr resb 10 ; 10 element byte array  
wArr resw 50 ; 50 element word array  
dArr resd 100 ; 100 element double array  
qArr resq 200 ; 200 element quad array